﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;

namespace DECOR.DL.DALC
{
    public interface IPedidoDALC
    {
        /// Devuelve el Listado de Instalacion
        /// </summary>
        /// <param name="pNumDoc">Numero de Documento</param>
        /// <returns></returns>
        List<InstalaBE> ListadoInstalacion(string pNumDoc);

        /// <summary>
        /// <summary>
        /// Genera una orden de servicio dependiendo de los codigos en el arreglo
        /// </summary>
        string generarServicio(out string pNumPedido, List<string> pLstServ, List<string> pLstVisita);

        /// <summary>
        /// Devuelve el plan de facturación.
        /// </summary>
        List<PlanFactBE> getPlanFact(string pNumPedido, out List<CatFactBE> pCatFact);
       
        /// <summary>
        /// Set el plan de facturación.
        /// </summary>
        string setPlanFact(string pNumPedido, List<PlanFactBE> lst_PlanFactBE, bool esCreacion);

        /// <summary>
        /// Devuelve las glosas tanto por materiales o por jerarquía.
        /// </summary>
        List<GlosaBE> glosasCotizacion(string numPedido); //rgutierrez 18.11.2011
        //List<GlosaBE> glosasCotizacion(List<string> pLstMat, DateTime fecha);

        //List<GlosaBE> ObtenerGlosasA4(string numPedido); //rgutierrez 27.01.2012

        /// <summary>
        /// Devuelve la lista de fletes/estibas para un rango de fechas
        /// </summary>
        /// <param name="pTipoRep">Flete (06) ó Estiba (07)</param>
        /// <param name="pAgrupacion">Vendedor (1) ó Oficina (2)</param>
        /// <param name="pOficina">Oficina de ventas (si es vacío trae todas)</param>
        /// <param name="pFecIni">Fecha de inicio rango</param>
        /// <param name="pFecFin">Fecha de fin rango</param>
        /// <returns></returns>
        List<FleteBE> ListaFleteEstiba(string pTipoRep, string pAgrupacion, string pOficina, DateTime pFecIni, DateTime pFecFin);
        
        /// <summary>
        /// Devuelve la lista de fletes/estibas por codigo postal para un rango de fechas 
        /// </summary>
        /// <param name="pTipoRep">Flete (06) ó Estiba (07)</param>
        /// <param name="pOficina">Oficina de ventas (si es vacío trae todas)</param>
        /// <param name="pFecIni">Fecha de inicio rango</param>
        /// <param name="pFecFin">Fecha de fin rango</param>
        /// <returns></returns>
        List<FleteBE> ListaOpFleteEstiba(string pTipoRep, string pOficina, DateTime pFecIni, DateTime pFecFin);





        /// <summary>
        /// Ejecuta la transacción Bapi_Salesorder_Createfromdat2 y retorna el numero de pedido generado en el parámetro de salida pNumPedido.
        /// </summary>
        /// <param name="pNumPedido">Parámetro de salida con el # de pedido</param>
        /// <param name="pObjPedido">Parámetro de entrada que contiene la información para grabar el pedido</param>
        /// <returns>Mensaje de Error o de # de Pedido</returns>
        string procesarPedido(out string pNumPedido, PedidoBE pObjPedido);
        PedidoBE leer(string pNumPedido, bool pLight);
        string modificar(out bool pOk, PedidoBE pObjPedido);
        string reaprovisionar(out bool pOk, PedidoBE pObjPedido);

        List<DescuentoBE> calcularPrecios(PedidoBE pObjPedido, DetalleBE pItem, out string retval);
                
        StatusBE verStatus(string pNumPedido);
        List<EntregaBE> verEntrega(string pVbeln, string pvbtyp_n);
        List<SeguimientoBE> buscaDocumentos(string pNumPedido);
        void buscaDatosImpresion(string pNumPedido, out string pDireccion, out string pTelefono, out string pFax, out string pAtencion);

        List<GenericBE> buscarMotivosRechazo(string pCodMotivo);

        List<DetalleBE> buscaTipoPosicion(string pCodTipoDoc, string pCodMaterial, string pOrgVtas,
                                          string pCanalDist, string pCodCentro, out string pTipoPos);

        List<PedidoBE> listaPedidos(string pNumDoc, string pCodUsuario, DateTime pFecInicio, DateTime pFecFin,
                                    string pOrgVtas, string pCanal, string pOficina, string pRefLegal);

        List<PedidoBE> listaPedidos(string pNumDoc, string pCodUsuario, DateTime pFecInicio, DateTime pFecFin,
                                           string pOrgVtas, string pCanal, string pOficina, string pRefLegal,
                                           string pMatrn, string pNombCli, string pStceg, string pDescMater, string pCodCli);

        List<PedidoPosBE> ListaPendDesp(string pNumPedido, DateTime pFecIni, DateTime pFecFin, string pCodAsesor,
                                        string pOrgVentas, string pCanalDist, string pOfVentas);
        
        /// <summary>
        /// Valida que la copia sea permitida
        /// </summary>
        /// <param name="pNumDoc">Número de documento Original</param>
        /// <param name="pTipoDoc">Tipo de documento a crear</param>
        /// <returns>S = si se puede  N = No se puede</returns>
        string validaCopia(string pNumDoc, string pTipoDoc);

        /// <summary>
        /// Retorna una lista de la cabecera y los detalles según los parámetros enviados a SAP
        /// </summary>
        /// <param name="pNumDoc"></param>
        /// <param name="pCodUsuario"></param>
        /// <param name="pFecInicio"></param>
        /// <param name="pFecFin"></param>
        /// <param name="pOrgVtas"></param>
        /// <param name="pCanal"></param>
        /// <param name="pOficina"></param>
        /// <param name="pRefLegal"></param>
        /// <param name="pMatrn"></param>
        /// <param name="pNombCli"></param>
        /// <param name="pStceg"></param>
        /// <param name="pDescMater"></param>
        /// <param name="pCodCli"></param>
        /// <returns></returns>
        List<PedidoCabeceraBE> listaPedidoCabeceraDetalle(string pNumDoc, string pCodUsuario, DateTime pFecInicio, DateTime pFecFin,
                string pOrgVtas, string pCanal, string pOficina, string pRefLegal,
                string pMatrn, string pNombCli, string pStceg, string pDescMater, 
                string pCodCli, out List<PedidoDetalleBE> lstPedidoDetalle,
                string pTipoDocumento);

        List<InterlocutorBE> listaInterlocutores(string pNumPedido);
    }
}
